package com.bangcommunity.bbframe.common.base.attribute;

import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @author tanghc
 */
public abstract class AbstractAttributeAssemble implements IAttributeAssemble {

    protected Map<String, IAttributeDesc> objectLinkedHashMap;

    public AbstractAttributeAssemble() {
        initCollector();
    }

    protected void initCollector() {
        objectLinkedHashMap = new LinkedHashMap<>();
    }

    @Override
    public Collection<IAttributeDesc> attibutes() {
        return objectLinkedHashMap.values();
    }

    @Override
    public IAttributeAssemble add(IAttributeDesc attributeDesc) {
        if (null != attributeDesc && null != attributeDesc.getName()) {
            objectLinkedHashMap.putIfAbsent(attributeDesc.getName(), attributeDesc);
        }
        return this;
    }

    @Override
    public IAttributeAssemble addAll(Collection<IAttributeDesc> attributeDescs) {
        if (null != attributeDescs) {
            attributeDescs.stream().forEach(attributeDesc -> {
                add(attributeDesc);
            });
        }
        return this;
    }

    @Override
    public IAttributeAssemble remove(String name) {
        objectLinkedHashMap.remove(name);
        return this;
    }

}
